package exammanager;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.SQLException;

import gui.CustomJButton;
import gui.GUIMain;

import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import questionmanager.GUIQuestionDisplay;
import rmi.Question;

public class GuiQuestionAddRight extends JPanel{

	private static final long serialVersionUID = 1L;
	private GUIQuestionAdd parent;
	private GUIQuestionDisplay display;
	private CustomJButton addButton;
	
	public GuiQuestionAddRight(GUIQuestionAdd parent) {
		this.parent = parent;
		setOpaque(false);
		setLayout(new BorderLayout());
		setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
		display = new GUIQuestionDisplay(GUIQuestionDisplay.FROM_QUESTIONTYPE,false,false);
		
		JPanel bottomPanel;
		bottomPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
		addButton = new CustomJButton("Thêm", 100, 30, CustomJButton.BLUE, CustomJButton.LIGHTER,
				Color.WHITE, 1, false, false);
		addButton.addActionListener(new AddQuestionAction());
		bottomPanel.add(addButton);
		add(bottomPanel, BorderLayout.SOUTH);
		
		display.getJTable().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
		display.addMouseListener(new QuestionMouseListener());
		display.getJTable().getSelectionModel().addListSelectionListener(new QuestionSelectionListener());
		add(display,BorderLayout.CENTER);
	}
	
	public void refresh(int[] qt){
		display.getQuestionFromDB(qt);
	}
	
	class AddQuestionAction extends AbstractAction{
		private static final long serialVersionUID = 1L;

		@Override
		public void actionPerformed(ActionEvent arg0) {
			boolean doneAll = true;
			boolean skipSame = false;
			int[] selectedRow = display.getJTable().getSelectedRows();
			for(int i = 0;i<selectedRow.length; i++){
				Question temp = (Question) display.getModel().getValueAt(selectedRow[i], 0);
				try {
					if(GUIMain.getDb().CheckIfExamDetailExist(parent.getExamID(), temp.getQuestionID())){
						if(skipSame){
							continue;
						}
						int zxc = JOptionPane.showConfirmDialog(parent, "Câu hỏi '" + temp.getQuestion() +"' không thể thêm vào vì đã tồn tại trong đề thi. Bạn muốn bỏ qua các câu hỏi trùng kế tiếp?\nBạn có thể nhấn Yes để bỏ qua các câu hỏi trùng kế tiếp, No để tiếp tục và Cancel để thoát" , 
								"Thông báo", JOptionPane.YES_NO_CANCEL_OPTION);
						if(zxc == JOptionPane.YES_OPTION){
							skipSame = true;
						}else if (zxc == JOptionPane.NO_OPTION){
							continue;
						}else {
							doneAll = false;
							break;
						}
					}else{
						if(GUIMain.getDb().InsertExamDetail(parent.getExamID(), temp.getQuestionID())){	
							
						}else{
							int zxcv = JOptionPane.showConfirmDialog(parent, "Thêm câu hỏi '" + temp.getQuestion() +"' vào CSDL thất bại.\n Bạn muốn tiếp tục?" , 
									"Thông báo", JOptionPane.YES_NO_OPTION);
							if(zxcv == JOptionPane.YES_OPTION){
								continue;
							}else{
								break;
							}
						}
					}
				} catch (SQLException e) {
					e.printStackTrace();
					return;
				}
			}
			if(doneAll){
				JOptionPane.showMessageDialog(parent, "Thêm thành công danh sách câu hỏi mới vào đề thi.", "Thành công", JOptionPane.INFORMATION_MESSAGE);
			}else{
				JOptionPane.showMessageDialog(parent, "Huỷ thành công", "Thành công", JOptionPane.INFORMATION_MESSAGE);
			}
		}
	}
	
	class QuestionMouseListener extends MouseAdapter{

		@Override
		public void mouseClicked(MouseEvent e) {
			switch(e.getModifiers()) {
				case InputEvent.BUTTON1_MASK: {  
					super.mouseClicked(e);	
					break;
		        }
				case InputEvent.BUTTON2_MASK: {    
					break;
		        }
				case InputEvent.BUTTON3_MASK: {
			        break;
		        }
			}
		}
	}
	
	class QuestionSelectionListener implements ListSelectionListener{

		@Override
		public void valueChanged(ListSelectionEvent e) {
			if(!e.getValueIsAdjusting()){
				int[] temp = display.getJTable().getSelectedRows();
				if(temp.length == 0){
					display.getCellEditor().stopCellEditing();
				}else{
				}
			}
		}
	}
}
